






# 这是一个示例 Python 脚本。

# 按 Shift+F10 执行或将其替换为您的代码。
# 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。


from sqlalchemy import Column, Integer, String, Text, DateTime, Date
from sqlalchemy import create_engine, UniqueConstraint, Index, ForeignKey, MetaData, Table
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session

#
engine = create_engine(
    # "postgresql+psycopg2://postgres:12345678@127.0.0.1/dw",  # PostgreSQL
    "mysql+pymysql://root:root@127.0.0.1/digital_grassroot",
    max_overflow=0,  # 超过连接池大小外最多创建的链接数
    pool_size=20,  # 连接池大小
    pool_timeout=30,  # 连接池中没有线程最多等待时间，否则报错
    pool_recycle=1,  # 多久之后对连接池中的连接进行回收（重置） -1 不回收
    echo=True
    # , client_encoding='utf8'
)

# 创建基类
ORMBase = declarative_base()

# 每次执行数据库操作的时候，都需要创建一个Session ，相当于管理器（相当于Django 的ORM 的objects )
Session = sessionmaker(bind=engine)
# 线程安全， 基于本地线程实现每个线程用同一个session
current_session = scoped_session(Session)

# 实例化(相当于 实现了一个单例模式）
dbSession = current_session()

# 通过engine 获得 conn ,
connection = engine.raw_connection()
#
cursor = connection.cursor()


# 定义用户模型
class DigWorkOrderTech():
    # __tablename__ 属性将映射到数据库中的user 表，  表名称
    __tablename__ = "dig_work_order_tech"
    # 在此处添加约束， 如 索引Index 或联合索引，
    __table_args__ = (

    )

    id = Column(String(50), nullable=False, primary_key=True ,comment="ID")
    problem_name = Column(String(500), nullable=True, comment="核查类别")
    problem_type = Column(String(255), nullable=True, comment="核查大类")
    problem_code = Column(String(255), nullable=True, comment="核查类别代码")
    user_name = Column(String(255), nullable=True, comment="业务负责人")
    user_code = Column(String(255), nullable=True, comment="业务负责人isc")
    user_phone = Column(String(255), nullable=True, comment="业务负责人电话")
    temp_code = Column(String(255), nullable=True, comment="")


class IscUserRoleRelation():
    # __tablename__ 属性将映射到数据库中的user 表，  表名称
    __tablename__ = "isc_user_role_relation"
    #
    __mapper_args__ = {
        'primary_key': ['user_id','role_id']
    }

    user_id = Column(String(255), nullable=True, comment="用户id")
    role_id = Column(String(255), nullable=True, comment="角色id")
    create_date = Column(DateTime, nullable=False, default=DateTime, comment="创建时间")



class IscUser():
    # __tablename__ 属性将映射到数据库中的user 表，  表名称
    __tablename__ = "isc_user"
    # 在此处添加约束， 如 索引Index 或联合索引，
    __table_args__ = ( )
    id = Column(String(255), nullable=False, default=0 ,comment="主键")
    base_org_id = Column(String(255), nullable=True, comment="基层组织单元id")
    name = Column(String(255), nullable=True, comment="名称")
    user_name = Column(String(255), nullable=True, primary_key=True ,  comment="")
    state = Column(String(255), nullable=True, comment="状态值1：正常，2禁用，4 密码过期，5 账号过期")
    title = Column(String(255), nullable=True, comment="职称")
    user_id = Column(String(255), nullable=True, comment="用户id")
    org_anisation_name = Column(String(255), nullable=True, comment="")
    disable_role = Column(String(255), nullable=True, default=0, comment="")
    city_org_id = Column(String(50), nullable=True, comment="所属地市公司id")
    major_type = Column(String(50), nullable=True, comment="专业分类")
    city_org = Column(String(255), nullable=True, comment="地市代码")
    system_id = Column(String(255), nullable=True, comment="系统id")
    system_code = Column(String(255), nullable=True, comment="系统代码")
    system_name = Column(String(255), nullable=True, comment="系统名称")
    flag = Column(String(255), nullable=True, comment="")
    mobile = Column(String(255), nullable=True, comment="手机号码")
    email = Column(String(255), nullable=True, comment="邮箱")
    sap_hr_code = Column(String(100), nullable=True, comment="")
    sex_code = Column(String(10), nullable=True, comment="")
    unicode = Column(String(100), nullable=True, comment="")


class IscOrg(ORMBase):
    # __tablename__ 属性将映射到数据库中的user 表，  表名称
    __tablename__ = "isc_org"
    __mapper_args__ = {
        'primary_key': ['id', 'jc_flag']
    }
    # 在此处添加约束， 如 索引Index 或联合索引，
    __table_args__ = ( )
    id = Column(String(255), nullable=False,comment="主键")
    name = Column(String(255), nullable=True, comment="名称")
    nature_code = Column(String(255), nullable=True,   comment="性质编码 部门: DEPT,单位: CORP")
    parent_id = Column(String(255), nullable=True,   comment="上级组织单元id")
    order_no = Column(String(255), nullable=True, comment="序号")
    name_path = Column(String(255), nullable=True, comment="")
    code = Column(String(255), nullable=True, comment="代码")
    found_date = Column(String(255), nullable=True, comment="创建日期")
    retract_date = Column(String(255), nullable=True,  comment="撤销日期")
    data_id = Column(String(255), nullable=True, comment="")
    sys_mark = Column(String(255), nullable=True, comment="备注")
    state = Column(String(255), nullable=True, comment="状态")
    domain = Column(String(255), nullable=True, comment="领域")
    org_short_name = Column(String(255), nullable=True, comment="简称")
    org_english_name = Column(String(255), nullable=True, comment="英文简称")
    remark = Column(String(255), nullable=True, comment="备注")
    postal_address = Column(String(255), nullable=True, comment="地址")
    postal_code = Column(String(255), nullable=True, comment="邮政编码")
    contact_email = Column(String(255), nullable=True, comment="电子邮件")
    contact_phone = Column(String(255), nullable=True, comment="联系电话")
    contact_fax = Column(String(255), nullable=True, comment="传真")
    manning_quotas = Column(String(100), nullable=True, comment="人员编制")
    func_type = Column(String(100), nullable=True, comment="")
    primary_business = Column(String(100), nullable=True, comment="主营业务")
    unicode = Column(String(255), nullable=True, comment="唯一标识")
    jc_flag = Column(Integer(), nullable=True, default=0, comment="基层专区标识： 0 -默认， 1-地市公司，2-区县公司")
    level_no = Column(Integer(), nullable=True, comment="组织机构层级（0-省，1=地市，2-区县，3-供电所）")
    level_isc = Column(String(255), nullable=True, comment="层级isc")




# 在数据库中创建表
ORMBase.metadata.create_all(engine)


def print_hi(name):
    # 在下面的代码行中使用断点来调试脚本。
    print(f'Hi, {name}')  # 按 Ctrl+F8 切换断点。


# 按间距中的绿色按钮以运行脚本。
if __name__ == '__main__':
    print_hi('PyCharm')

# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助















